package com.simple.admin.controller.system;


import com.simple.common.message.domain.dto.*;
import com.simple.common.message.domain.vo.ListByUserMessageVo;
import com.simple.common.message.domain.vo.ListMessageVo;
import com.simple.common.message.domain.vo.MessageTargetVo;
import com.simple.framework.constant.HttpStatus;
import com.simple.framework.core.controller.BaseController;
import com.simple.framework.core.domain.R;
import com.simple.framework.core.domain.vo.PagingVo;
import com.simple.system.service.MessageService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * @Description 消息表(Message)表控制层
 * @Author xiaoke
 * @Date 2024/8/10 18:00
 * @Version 1.0
 */
@RestController
@RequestMapping("message")
public class MessageController extends BaseController {

    private final MessageService messageService;

    public MessageController(MessageService messageService) {
        this.messageService = messageService;
    }

    /**
     * 分页查询消息列表
     * @param dto 查询条件
     * @return PagingVo<Message>
     */
    @GetMapping
    public R<PagingVo<ListMessageVo>> list(ListMessageDto dto) {
        return success(messageService.list(dto));
    }

    /**
     * 获取用户消息列表
     * @param isRead 是否已读
     * @return List<ListByUserMessageVo>
     */
    @GetMapping("/user")
    public R<List<ListByUserMessageVo>> listByUser(Boolean isRead) {
        return success(messageService.listByUserMessage(isRead));
    }

    /**
     * 分页查询用户消息列表
     * @param dto 查询条件
     * @return PagingVo<ListByUserMessageVo>
     */
    @GetMapping("/user/all")
    public R<PagingVo<ListByUserMessageVo>> listAllUserMessage(ListAllUserMessageDto dto) {
        return success(messageService.listAllUserMessage(dto));
    }

    /**
     * 新增消息
     * @param dto 请求参数
     * @return Long
     */
    @PostMapping
    public R<Long> create(@RequestBody @Validated AddMessageDto dto) {
        return success(HttpStatus.CREATED,messageService.create(dto));
    }

    /**
     * 撤回消息
     * @param id 主键
     * @return Void
     */
    @PutMapping("/revoked/{id}")
    public R<Void> revoked(@PathVariable Long id) {
        messageService.revoked(id);
        return success();
    }

    /**
     * 更新消息
     * @param id 主键
     * @param dto 请求参数
     * @return Void
     */
    @PutMapping("{id}")
    public R<Void> update(@PathVariable Long id,@RequestBody @Validated AddMessageDto dto) {
        messageService.update(id,dto);
        return success();
    }

    /**
     * 阅读消息
     * @param dto 请求参数
     * @return Void
     */
    @PostMapping("/read")
    public R<Void> read(@RequestBody @Validated ReadMessageDto dto) {
        messageService.read(dto);
        return success();
    }

    /**
     * 分页查询消息接收人列表
     * @param mid 消息id
     * @param dto 查询条件
     * @return PagingVo<MessageTargetVo>
     */
    @GetMapping("/targets/{mid}")
    public R<PagingVo<MessageTargetVo>> listMessageTargets(@PathVariable Long mid, ListMessageTargetsDto dto) {
        return success(messageService.listMessageTargets(mid,dto));
    }

    /**
     * 删除消息
     * @param id 主键
     * @return Void
     */
    @DeleteMapping("/{id}")
    public R<Void> delete(@PathVariable Long id) {
        messageService.delete(id);
        return success();
    }
}

